複数のリージョンで GuardDuty を設定した環境で、コンソールログインの検知通知を抑止する方法
困っていた内容
GuardDuty がコンソールログインのイベント、結果タイプ UnauthorizedAccess:IAMUser/ConsoleLogin
を複数のリージョンで検知しました。
GuardDuty は複数のリージョンで有効にしています。複数のリージョンで同一の結果タイプ UnauthorizedAccess:IAMUser/ConsoleLogin
が検知されました。
重複した GuardDuty の検知結果については、通知対象外としたいです。
どう対応すればいいの?
複数のリージョンで検知されたのはなぜ?
GuardDuty は GuardDuty が有効化されたそれぞれのリージョンの CloudTrail イベントを分析します。
グローバルのエンドポイント(signin.aws.amazon.com)を使用してコンソールログインを行った場合、全リージョンの CloudTrail に ConsoleLogin イベントが記録されます。
そのため、結果タイプ UnauthorizedAccess:IAMUser/ConsoleLogin
は GuardDuty が有効化された全リージョンで検知する可能性がありますので、結果を抑制したいすべてのリージョンでフィルタリング設定が必要となります。
通知の抑制方法
マネジメントコンソールでは「結果の抑制」、AWS CLI では create-filter コマンド(CreateFilter API)を実行することで実現可能です。
以下に、マネジメントコンソールの操作例を紹介します。執筆時点の画面となります。
- GuardDuty コンソールの左部のメニューから「結果」をクリック
- フィルター条件(ユーザー名)を選択/入力
- フィルター条件(検索タイプ)を選択/入力(UnauthorizedAccess:IAMUser/ConsoleLogin)
- フィルター結果の一覧に抑制したい検知結果が表示されることを確認
- 一覧上部の「結果の抑制」ボタンをクリック
- フィルターの名前/説明を入力
- 「保存」ボタンをクリック
以下はコマンドの例です。
$ aws guardduty create-filter \ --detector-id <検知 ID> \ --action ARCHIVE \ --name <フィルター名> \ --description <フィルターの説明> \ --finding-criteria '{"Criterion": {"type": {"Eq": ["UnauthorizedAccess:IAMUser/ConsoleLogin"]},"resource.accessKeyDetails.userName": {"Eq": ["<ユーザ名>"]}}}' \
※ detector-id は検知結果の「結果 ID: xxx」のリンク、もしくは通知された JSON から確認が行えます。
保存済みのフィルターは結果の抑制ボタン右側の「保存済みのルール」から確認が行えます。正常にフィルタリングできた場合、以降はフィルターの条件にヒットするイベントを検知したとき、自動で「アーカイブ済み」の状態となり、検知結果が通知されなくなります。